package com.mark.web.data.mapper;

import com.mark.web.data.entity.po.Cart;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Description: 购物车dao接口，用于购物车的数据库操作
 * @Author: Mark
 * @CreateDate: 2018/9/21
 * @Version: 2.0
 * @Copyright : 豆浆油条个人非正式工作室
 */
@Mapper
public interface CartMapper {

    /**
     * 新增
     * @param record
     * @return
     */
    int insert(Cart record);

    int insertSelective(Cart record);

    int deleteByPrimaryKey(Integer id);

    /**
     * 根据用户Id和商品Id删除购物车中的信息
     * @param userId ：用户的id
     * @param productIdList ：商品id的列表
     * @return ：影响的行数
     */
    int deleteByUserIdProductIds(@Param("userId") Integer userId,
                                 @Param("productIdList") List<String> productIdList);

    int updateByPrimaryKeySelective(Cart record);

    int updateByPrimaryKey(Cart record);

    /**
     *购物车中商品是够勾选状态的改变
     * @param userId ：用户id
     * @param productId ：商品id
     * @param checked ：商品的状态
     * @return ：影响的行数
     */
    int checkedOrUncheckedProduct(@Param("userId") Integer userId,
                                  @Param("productId") Integer productId,
                                  @Param("checked") Integer checked);

    Cart selectByPrimaryKey(Integer id);

    /**
     * 根据用户id，查找购物车信息
     * @param userId ：用户id
     * @return ：对应的用户的购物车列表信息
     */
    List<Cart> selectCartByUserId(Integer userId);

    /**
     *根据用户id查找购物车中商品未选中的数量
     * @param userId ：用户id
     * @return ：未选中商品的数量
     */
    int selectCartProductCheckedStatusByUserId(Integer userId);

    /**
     * 根据用户ID和商品ID查找购物车中的记录
     * @param userId ： 用户id
     * @param productId ： 商品id
     * @return ： 购物车对象
     */
    Cart selectCartByUserIdProductId(@Param("userId") Integer userId,
                                     @Param("productId") Integer productId);

    /**
     * 根据用户id查找购物车中商品的数量
     * @param userId ：用户id
     * @return ： 该用户的购物车商品的数量
     */
    Integer selectCartProductCount(@Param("userId") Integer userId);

    /**
     * 获取用户已经勾选的记录
     * @param currentUserId ： 当前的用户id
     * @param sellerId ：店家id
     * @return ： 购物车列表
     */
    List<Cart> selectCheckedCartByUserId(@Param("currentUserId") Integer currentUserId,
                                         @Param("sellerId") Integer sellerId);

    /**
     * 查找购物车中当前用户选中商品的对应的sellerId
     * @param currentUserId：当前用户id
     * @return
     */
    List<Integer> selectSellerIds(Integer currentUserId);
}